﻿#pragma once
#include <define.h>

// 交易时段类，表示一个或多个交易时段的管理和查询
class trading_section
{

public:
    // 构造函数，接受配置文件路径作为参数，用于初始化交易时段
    // noexcept 说明该函数不会抛出异常
	trading_section(const std::string& config_path) noexcept;

    // 虚析构函数，保证子类对象能够正确析构
    // noexcept 说明该函数不会抛出异常
	virtual ~trading_section() noexcept;

private:
    // 用于存储交易时段的向量，每个元素是一个时间段（由一对时间点组成）
    // std::pair<daytm_t, daytm_t> 中第一个 daytm_t 是交易的开始时间，第二个是结束时间
	std::vector<std::pair<daytm_t, daytm_t>> _trading_section;

public:
    // 检查给定的时间点是否在当前的交易时段内
    // 参数 last_time 是需要检查的时间点
    // 返回值为 true 表示在交易时段内，false 表示不在
	bool is_in_trading(daytm_t last_time) noexcept;

    // 获取当前交易时段的开盘时间
    // 返回值为交易时段的开始时间
	daytm_t get_open_time() noexcept;

    // 获取当前交易时段的收盘时间
    // 返回值为交易时段的结束时间
	daytm_t get_close_time() noexcept;

    // 根据当前时间获取下一次的开盘时间
    // 参数 now 是当前时间
    // 返回值为下一个交易时段的开始时间
	daytm_t next_open_time(daytm_t now) noexcept;

};
